package com.awcall.iot.mobile;


import com.awcall.iot.utils.OkHttpUtils;
import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by wuhui on 2017/6/22
 */
public class MobileIotService {

    private static final String BASE_URL = "http://120.197.89.173:8081/openapi/router";
    private static final String APP_KEY = "m1dgaoiqm0";
    private static final String SECRET = "99f45885736b93fe4476a6e97feaf321";
    private static final String EC_CODE = "2000471618";

    private static void sign(String method, Map<String, String> params) {
        params.put("appKey", APP_KEY);
        params.put("method", method);
        params.put("v", "2.0");
        params.put("format", "json");
        String sign = MobileIotSignUtils.sign(params, SECRET);
        params.put("sign", sign);
    }

    /**
     * 指定日期EC成员总数查询
     *
     * @param month 月份 yyyyMM
     * @return JsonNode
     */
    /*public static JsonNode groupMembercountQuery(String month) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("month", month);
        sign("iot.group.membercount.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团成员批量月流量查询
     *
     * @param month  月份 yyyyMM
     * @param pageNo 页码
     * @return JsonNode
     *//*
    public static JsonNode groupMonthlydatausageQuery(String month, int pageNo) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("month", month);
        params.put("pageNo", String.valueOf(pageNo));
        sign("iot.group.monthlydatausage.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团成员批量费用查询
     *
     * @param month  月份 yyyyMM
     * @param pageNo 页码
     * @return JsonNode
     *//*
    public static JsonNode groupMemberbillQuery(String month, int pageNo) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("month", month);
        params.put("pageNo", String.valueOf(pageNo));
        sign("iot.group.memberbill.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团成员信息查询
     *
     * @param pageNo 页码
     * @return JsonNode
     *//*
    public static JsonNode groupMemberInfoQuery(int pageNo) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("pageNo", String.valueOf(pageNo));
        sign("iot.group.memberInfo.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团成员批量流量告警清单查询
     *
     * @param dateStr 日期 yyyyMMdd
     * @param pageNo  页码
     * @return JsonNode
     *//*
    public static JsonNode groupDailydatausagealarmQuery(String dateStr, int pageNo) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("pageNo", String.valueOf(pageNo));
        params.put("dateStr", dateStr);
        sign("iot.group.dailydatausagealarm.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团成员批量日流量查询
     *
     * @param dateStr 日期 yyyyMMdd
     * @param pageNo  页码
     * @return JsonNode
     *//*
    public static JsonNode groupDailydatausageQuery(String dateStr, int pageNo) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("pageNo", String.valueOf(pageNo));
        params.put("dateStr", dateStr);
        sign("iot.group.dailydatausage.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团信息查询
     *
     * @return JsonNode
     *//*
    public static JsonNode groupInfoQuery() {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        sign("iot.group.info.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团总费用查询（历史）
     *
     * @param month 日期 yyyyMMdd
     * @return JsonNode
     *//*
    public static JsonNode groupBillQuery(String month) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("month", month);
        sign("iot.group.bill.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团产品信息查询
     *
     * @return JsonNode
     *//*
    public static JsonNode groupProductInfoQuery() {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        sign("iot.group.productInfo.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团成员批量停机告警清单查询
     *
     * @param dateStr 日期 yyyyMMdd
     * @param pageNo  页码
     * @return JsonNode
     *//*
    public static JsonNode groupDailyalarmQuery(String dateStr, int pageNo) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("pageNo", String.valueOf(pageNo));
        params.put("dateStr", dateStr);
        sign("iot.group.dailyalarm.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    *//**
     * 集团余额信息实时查询
     *
     * @param productCode 产品编号
     * @return JsonNode
     * @see #groupProductInfoQuery() productCode来源
     *//*
    public static JsonNode groupBalanceQuery(String productCode) {
        Map<String, String> params = new HashMap<>();
        params.put("ecCode", EC_CODE);
        params.put("productCode", productCode);
        sign("iot.group.balance.query", params);
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }*/

    /**
     * 终端停开机状态实时查询
     *
     * @param msisdn 手机号码
     * @return JsonNode
     */
    public static JsonNode memberTerminalstatusQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.terminalstatus.query", params);
        return request(params);
    }

    /**
     * 成员业务状态实时状态查询
     *
     * @param msisdn 手机号码
     * @return
     */
    public static JsonNode memberStatusQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.status.query", params);
        return request(params);
    }

    /**
     * 成员月费用详单查询
     *
     * @param msisdn  手机号码
     * @param dateStr 月份 yyyyMM
     * @return JsonNode
     */
    public static JsonNode memberMonthlybilldetailQuery(String msisdn, String dateStr) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("dateStr", dateStr);
        sign("iot.member.monthlybilldetail.query", params);
        return request(params);
    }

    /**
     * 一号多终端副卡激活
     *
     * @return
     */
    /*public static JsonNode terminalactivateChange() {
        //TODO 文档内无此接口
        return null;
    }*/

    /**
     * 成员信息查询
     *
     * @param msisdn 手机号码
     * @return JsonNode
     */
    public static JsonNode memberInfoQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.info.query", params);
        return request(params);
    }

    /**
     * 成员告警信息查询
     *
     * @param msisdn  手机号码
     * @param dateStr 日期 yyyyMMdd
     * @return JsonNode
     */
    public static JsonNode memberAlarmQuery(String msisdn, String dateStr) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("dateStr", dateStr);
        sign("iot.member.alarm.query", params);
        return request(params);
    }

    /**
     * 成员套餐已订购信息实时查询
     *
     * @param msisdn 手机号码
     * @return JsonNode
     */
    public static JsonNode memberPackageQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.package.query", params);
        return request(params);
    }


    /**
     * 成员日流量信息查询
     *
     * @param msisdn  手机号码
     * @param dateStr 月份 yyyyMM
     * @return JsonNode
     */
    public static JsonNode memberDailydatausageQuery(String msisdn, String dateStr) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("dateStr", dateStr);
        sign("iot.member.dailydatausage.query", params);
        return request(params);
    }

    /**
     * 成员余额实时查询
     *
     * @param msisdn 手机号码
     * @return JsonNode
     */
    public static JsonNode memberBalanceQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.balance.query", params);
        return request(params);
    }

    /**
     * 成员剩余流量信息实时查询
     *
     * @param msisdn 手机号码
     * @return JsonNode
     */
    public static JsonNode memberDataplanleftQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.dataplanleft.query", params);
        return request(params);
    }

    /**
     * 成员号码流量信息实时查询
     *
     * @param msisdn 手机号码
     * @return JsonNode
     */
    public static JsonNode memberDatausageQuery(String msisdn) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        sign("iot.member.datausage.query", params);
        return request(params);
    }

    /**
     * 成员月费用查询
     *
     * @param msisdn       手机号码
     * @param startDateStr 开始月份 yyyyMM
     * @param endDateStr   结束月份 yyyyMM
     * @return JsonNode
     */
    public static JsonNode memberMonthlybillQuery(String msisdn, String startDateStr, String endDateStr) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("startDateStr", startDateStr);
        params.put("endDateStr", endDateStr);
        sign("iot.member.monthlybill.query", params);
        return request(params);
    }

    /**
     * 故障排查信息实时查询
     *
     * @return JsonNode
     */
    /*public static JsonNode memberFaultcheckQuery() {
        //TODO 文档内无此接口
        return null;
    }*/

    /**
     * 成员号码已用流量详情实时查询
     *
     * @return JsonNode
     */
    /*public static JsonNode memberUseflowinfoQuery() {
        //TODO 文档内无此接口
        return null;
    }*/

    /**
     * 在线信息实时查询
     *
     * @return JsonNode
     */
    /*public static JsonNode memberGprsrealsingleQuery() {
        //TODO 文档内无此接口
        return null;
    }*/

    /**
     * 成员月流量查询
     *
     * @param msisdn       手机号码
     * @param startDateStr 开始月份 yyyyMM
     * @param endDateStr   结束月份 yyyyMM
     * @return JsonNode
     */
    public static JsonNode memberMonthlydatausageQuery(String msisdn, String startDateStr, String endDateStr) {
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("startDateStr", startDateStr);
        params.put("endDateStr", endDateStr);
        sign("iot.member.monthlydatausage.query", params);
        return request(params);
    }

    /**
     * 号码停开机
     *
     * @param msisdn  手机号码
     * @param ncode  操作类型:11-停机12-开机
     * @return
     */
    public static JsonNode memberSimstateChange(String msisdn,String ncode){
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("ncode", ncode);
        sign("iot.member.simstate.change", params);
        return request(params);
    }

    /**
     *GPRS停开
     *
     * @param msisdn  手机号码
     * @param optType  服务类型：5-GPRS停,6-GPRS开
     * @return
     */
    public static JsonNode memberDataservicestateChange(String msisdn,String optType){
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("optType", optType);
        sign("iot.member.dataservicestate.change", params);
        return request(params);
    }

    /**
     * Apn切换
     *
     * @param msisdn  手机号码
     * @param prdOrdNum1  已订购产品编码
     * @param prdOrdNum2  目标产品编码
     * @return
     */
    public static JsonNode memberApnChange(String msisdn,String prdOrdNum1,String prdOrdNum2){
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("prdOrdNum1", prdOrdNum1);
        params.put("prdOrdNum2", prdOrdNum2);
        sign("iot.member.apn.change", params);
        return request(params);
    }

    /**
     * 套餐修改
     *
     * @param msisdn   手机号码
     * @param newPackage 目的套餐编码
     * @param oldPackage  已订购套餐编码（动力100卡必填）
     * @return
     */
    public static JsonNode memberPlanChange(String msisdn,String newPackage,String oldPackage){
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("newPackage", newPackage);
        params.put("oldPackage", oldPackage);
        sign("iot.member.plan.change", params);
        return request(params);
    }

    /**
     * 套餐叠加
     *
     * @param msisdn  手机号码
     * @param newPackage  目的套餐编码
     * @return
     */
    public static JsonNode memberAdditionplanChange(String msisdn,String newPackage){
        Map<String, String> params = new HashMap<>();
        params.put("msisdn", msisdn);
        params.put("newPackage", newPackage);
        sign("iot.member.additionplan.change", params);
        return request(params);
    }

    private static JsonNode request(Map<String, String> params) {
        return OkHttpUtils.getInstance()
                .url(BASE_URL)
                .queryParams(params)
                .execute()
                .asJsonNode();
    }

    public static void main(String[] args) {
//        JsonNode JsonNode = memberMonthlydatausageQuery("1064819069898", "201704", "201706");
//        System.out.println(JsonNode.toJSONString());

        Map<String, String> params = new HashMap<>();
        /*params.put("msisdn", "1064818155893");
        sign("iot.member.terminalstatus.query", params);
        OkHttpUtils.getInstance().url(BASE_URL).queryParams(params).execute().asString();


        params.put("msisdn", "1064818155893");
        sign("iot.member.info.query", params);
        String s = OkHttpUtils.getInstance().url(BASE_URL).queryParams(params).execute().asString();

        JsonNode jsonNode = memberTerminalstatusQuery("1064818155893");*/

        JsonNode jsonNode = memberDailydatausageQuery("1064714104967","201712");

    }
    
    

}
